package utils;

import javax.servlet.http.Part;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.UUID;

/**
 * @author Debug16
 * @version 1.0
 * @description: 用于文件的操作
 * @date 2021/12/15 上午 10:14
 */
public class FileUtils {
    /**
     * 获取一个短的uuid 返回的是UUID最后一个 - 的后面字符串
     *
     * @param part Part对象
     * @return String 返回的是UUID最后一个 - 的后面字符串 || null
     */
    public static String getShortUUID(Part part) {
        if (part == null) return null;
        String uuid = UUID.randomUUID().toString();
        String fileName;
        String name = part.getSubmittedFileName();
        if (name == null || "".equals(name)) {
            return null;
        }
        int i = name.lastIndexOf(".");
        int i1 = uuid.lastIndexOf("-") + 1;
        fileName = uuid.substring(i1) + name.substring(i);
        return fileName;
    }

    /**
     * 拷贝文件 如果拷贝的目录有该文件的话就不会进行拷贝
     *
     * @param srcPathStr 目标文件地址
     * @param desPathStr 拷贝的目录
     */
    public static void copyFile(String srcPathStr, String desPathStr) {
        //获取源文件的名称
        String newFileName = srcPathStr.substring(srcPathStr.lastIndexOf("\\") + 1); //目标文件地址
        desPathStr = desPathStr + File.separator + newFileName; //源文件地址
        File file = new File(desPathStr);
        //如果文件已经存在
        if (file.exists()) {
            return;
        }
        try {
            FileInputStream fis = new FileInputStream(srcPathStr);//创建输入流对象
            FileOutputStream fos = new FileOutputStream(desPathStr); //创建输出流对象
            byte[] datas = new byte[1024 * 8];//创建搬运工具
            int len = 0;//创建长度
            while ((len = fis.read(datas)) != -1)//循环读取数据
            {
                fos.write(datas, 0, len);
            }
            fis.close();//释放资源
            fos.close();//释放资源
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 删除文件
     *
     * @param path 文件的地址
     * @return boolean 删除成功返回true
     */
    public static boolean deleteFile(String path) {
        File file = new File(path);
        boolean flag = false;
        if (!file.exists()) {
            return false;
        }
        if (file.isFile()) {
            flag = file.delete();
        }
        return flag;
    }
}
